package com.demo.java.OD51_100.OD64;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【火星文计算】问题-递归法
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145606100
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            // 创建 Scanner 对象用于读取输入
            Scanner s = new Scanner(System.in);

            // 读取输入字符串
            String line = s.nextLine();

            // 调用 solve 方法并输出结果
            System.out.println(solve(line));
        } catch (Exception e) {
            // 捕获并打印任何异常，并输出 "input error"
            e.printStackTrace();
            System.out.println("input error");
        }
    }

    // 递归计算函数，用于根据输入的字符串执行计算
    public static int solve(String input) {
        // 处理 # 运算符
        // 查找字符串中最后一个 # 运算符的位置
        int idx = input.lastIndexOf("#");
        if (idx != -1) {
            // 如果找到了 #，则将字符串分为左右两个部分
            String left = input.substring(0, idx); // 左边部分
            String right = input.substring(idx + 1); // 右边部分

            // 根据给定的递归公式进行计算：2 * solve(left) + 3 * solve(right) + 4
            return 2 * solve(left) + 3 * solve(right) + 4;
        }

        // 处理 $ 运算符
        // 查找字符串中最后一个 $ 运算符的位置
        idx = input.lastIndexOf("$");
        if (idx != -1) {
            // 如果找到了 $，则将字符串分为左右两个部分
            String left = input.substring(0, idx); // 左边部分
            String right = input.substring(idx + 1); // 右边部分

            // 根据给定的递归公式进行计算：3 * solve(left) + solve(right) + 2
            return 3 * solve(left) + solve(right) + 2;
        }

        // 如果字符串不包含 # 或 $，则它是一个数字，结束递归并返回该数字的值
        return Integer.parseInt(input);
    }
}